iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

後端新手PHP+Laravel筆記系列 第 12

[Day12]PHP 可變函數及回傳值

  • 分享至 

  • xImage
  •  

PHP函數

函數返回值return

值通過使用可選的返回語句返回。可以返回包括數組和對象的任意類型。返回語句會立即中止函數的運行,並且將控制權交回調用該函數的代碼行

如果省略了 return,則返回值為 null。

1. 基礎語法

<?php
function square($num)
{
    return $num * $num;
}
echo square(5);   // outputs '25'.
?>

2. 返回一個數組以得到多個返回值

函數不能返回多個值,但可以通過返回一個數組來得到類似的效果。

<?php
function small_numbers()
{
    return [0, 1, 2];
}
// 使用短數組語法將数组中的值賦给一組變數
[$zero, $one, $two] = small_numbers();

// 在 7.1.0 之前,唯一相等的選擇是使用 list() 結構
list($zero, $one, $two) = small_numbers();
?>

3. 返回一個引用

從函數返回一個引用,必須在函數聲明和指派返回值給一個變量時都使用引用運算符 &

<?php
function &returns_reference()
{
    return $someref;
}

$newref =& returns_reference();
?>

可變函數

PHP 支持可變函數的概念。就是說如果一個變量名後有圓括號,PHP 就會先去尋找這個變數名稱的函數執行。可變函數可以用來實現包括回調函數,以及函數表在內的一些用途。

來看看範例

1. 可變函數示例

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// 使用名為 echo 的函數
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // This calls foo()

$func = 'bar';
$func('test');  // This calls bar()

$func = 'echoit';
$func('test');  // This calls echoit()
?>

2. 可變方法範例

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // This calls the Bar() method
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // This calls $foo->Variable()

?>

3. Variable 方法和靜態屬性範例

當調用靜態方法時,函數調用要比靜態屬性優先

<?php
class Foo
{
    static $variable = 'static property';
    static function Variable()
    {
        echo 'Method Variable called';
    }
}

echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable();  // This calls $foo->Variable() reading $variable in this scope.

?>

4. 複雜的可調用對象

<?php
class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar"

// 這樣可是會出錯的哦,沒有先實體化類別
$func = array("Foo", "baz");
$func(); // Uncaught Error: Non-static method Foo::baz() cannot be called statically in ....
?>

内部(内置)函数

PHP 有很多標準的函數和結構。還有一些函數需要和特定地 PHP 擴展模塊一起編譯,否則在使用它們的時候就會得到一個致命的“未定義函數”錯誤。

例如要連接MySQL,要使用 mysqli_connect() 函數,就需要在編譯 PHP 的時候加上 MySQLi 支持。可以使用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加載了那些擴展庫



上一篇
[Day11]PHP函數01
下一篇
[Day13]PHP 匿名函式及箭頭函式
系列文
後端新手PHP+Laravel筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言